package com.cbw.view;
import com.cbw.bean.Express;
import java.util.ArrayList;
import java.util.Scanner;
public class Views {
    private Scanner sc=new Scanner(System.in);
    /**
     * 1.欢迎
     */
    public void welcome(){
        System.out.println("欢迎使用快递驿站");
    }

    /**
     * 3.输入功能选项
     * @param max
     * @return
     */
    public int inputKey(int max){
        System.out.println("请输入选择:");
        String s = sc.nextLine();
        int num=-1;
        try {
            num = Integer.parseInt(s); //转换可能出现异常
        }catch (Exception e){

        }
        if (num<0||num>max){ //输入不合理
            System.out.println("输入错误，请重新输入");
            num=inputKey(max); //输入选项不符合则继续调用方法
        }
        return num;
    }

    /**
     * 2.展示主菜单
     */
    public void showMainMenu(){
        System.out.println("请选择用户类型:");
        System.out.println("1.快递员 2.用户 3.退出程序");
    }

    /**
     * 4.展示管理员子菜单
     */
    public void showAdminMenu() {
        System.out.println("请选择操作:");
        System.out.println("1.增加快递 2.删除快递 3.修改快递 4.查看所有 5.返回主菜单");
    }

    /**
     * 5.展示用户子菜单
     */
    public void showUserMenu() {
        System.out.println("请选择操作:");
        System.out.println("1.取件 2.返回上级菜单");
    }

    /**
     * 6.添加快递信息操作
     * @return
     */
    public Express inputExpress() {
        String number = inputNumber(); //输入快递单号
        String company = inputCompany();//输入快递公司
        return new Express(number,company);

    }
    public String inputNumber() {
        return inputStr("请输入快递单号:");
    }

    private String inputCompany() {
        return inputStr("请输入快递公司:");
    }

    /**
     * 7.封装方法专门在控制台接收用户输入的字符串
     * 输入提示，接收一个字符串
     * @param msg
     * @return
     */
    private String inputStr(String msg){
        System.out.println(msg);
        return sc.nextLine();
    }

    /**
     * 8.视图层显示 客户端向服务器添加快递后服务器的回写信息(传回的是快递)
     * @param add
     */
    public void printResultAdd(Express add) {
        System.out.println(add==null?"添加失败":"添加成功，存储位置:"+add.showTarget()+",取件码:"+add.getCode());
    }

    /**
     * 9.当服务器通过客户端告知主流程快递柜满了，视图层给出提示
     */
    public void full() {
        System.out.println("快递柜已满");
    }

    /**
     * 10.视图层给出删除后提示
     * @param remove
     */
    public void printResultRemove(Boolean remove) {
        System.out.println(remove?"删除成功":"删除失败");
    }

    /**
     * 11.未查到单号
     */
    public void printNone() {
        System.out.println("无此单号信息");
    }

    /**
     * 12.修改快递后的结果
     */
    public void printResultModify(Express modify) {
        System.out.println(modify==null?"修改失败":"修改成功:"+modify);
    }

    /**
     * 13.显示所有快递信息
     * @param list
     */
    public void showList(ArrayList<Express> list) {
        if(list.size()==0){
            showEmpty();
        }else {
            showTitle();
            for (Express express:list){
                System.out.printf("%-9s",express.getNumber());
                System.out.printf("%-9s",express.getCompany());
                System.out.printf("%-9s",express.getCode());
                System.out.printf("%-9s",express.getTarget());
            }
            System.out.println();
        }
    }

    /**
     * 标题:快递字段
     */
    private void showTitle() {
        System.out.printf("%-6s","快递单号");
        System.out.printf("%-6s","公司名称");
        System.out.printf("%-6s","取件码");
        System.out.printf("%-6s","存储位置");
        System.out.println();
    }

    /**
     * 列表中没有快递
     */
    private void showEmpty() {
        System.out.println("暂无任何快递信息");
    }

    /**
     * 输入取件码
     * @return
     */
    public int inputCode() {
        System.out.println("请输入取件码:");
        String s = sc.nextLine();
        int num=-1;
        try {
            num = Integer.parseInt(s); //转换可能出现异常
        }catch (Exception e){

        }
        if (num<100000||num>999999){ //输入不合理
            System.out.println("输入错误，请重新输入");
            num=inputCode(); //输入取件码不符合则继续调用方法
        }
        return num;
    }

    public void printResultPick(Express express) {
        System.out.println(express==null?"取件失败":"取件成功,存储位置:"+express.getTarget());
    }
}
